package com.example.forum.services;

import com.example.forum.model.ArticleReply;
import org.apache.ibatis.annotations.Param;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

public interface IArticleReplyService {

    /**
     * 回复信息 （添加内容到回复表 文章的回复字段+1）
     * @param articleReply
     */
    @Transactional  //两步操作 用事务管理起来
    void create(ArticleReply articleReply);

    /**
     * 根据文章id 查询该文章的所有回复表内容
     * @param articleId
     * @return
     */
    List<ArticleReply> selectByArticleId(Long articleId);

    /**
     * 查询指定用户的所有评论
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页大小
     * @return 用户评论列表
     */
    List<ArticleReply> selectByUserId(Long userId, Integer page, Integer size);

    /**
     * 获取用户评论总数
     * @param userId 用户ID
     * @return 评论总数
     */
    Integer countByUserId(Long userId);

    /**
     * 根据ID获取评论详情
     * @param id 评论ID
     * @return 评论详情
     */
    ArticleReply getById(Long id);

    /**
     * 删除评论
     * @param id 评论ID
     */
    @Transactional
    void deleteById(Long id);
    
    /**
     * 管理员删除评论
     * @param id 评论ID
     */
    @Transactional
    void adminDeleteComment(Long id);
    
    /**
     * 忽略评论举报
     * @param id 评论ID
     */
    @Transactional
    void ignoreReports(Long id);
    
    /**
     * 获取评论举报列表
     * @param id 评论ID
     * @return 举报列表
     */
    List<Map<String, Object>> getReportListByCommentId(Long id);
    
    /**
     * 分页获取评论列表，支持关键词搜索和状态筛选
     * @param page 页码
     * @param size 每页记录数
     * @param keyword 搜索关键词
     * @param status 状态筛选
     * @return 评论列表
     */
    List<Map<String, Object>> getCommentsByPage(int page, int size, String keyword, String status);
    
    /**
     * 根据条件统计评论数量
     * @param keyword 搜索关键词
     * @param status 状态筛选
     * @return 评论数量
     */
    int countCommentsByCondition(String keyword, String status);
}
